package com.mida.dms.knw.api;


import com.mida.dms.knw.entity.DtDefineSpace;
import com.mida.dms.knw.entity.vo.DtDefineSpaceConsumerVo;
import com.mida.dms.knw.entity.vo.DtDefineSpaceVo;
import com.mida.dms.knw.vo.PageResultVo;
import com.mida.tool.common.result.ActionResult;
import com.mida.tool.common.result.ListResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.context.annotation.DependsOn;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
@DependsOn("loadFromDatabasePropertyConfig")
//@FeignClient(name = "dtDefineSpaceApi", url = "${dms.knw.feign.url}")
@FeignClient(name = "dtDefineSpaceApi", url = "dms.knw.feign.url")
public interface DtDefineSpaceApi {
    /**
     * 1、添加定义空间
     *
     * @param dtDefineSpaceVo
     * @return
     */
    @PostMapping(value = "dtDefineSpace/add", consumes = {"application/json"})
    ActionResult add(@RequestBody DtDefineSpaceVo dtDefineSpaceVo);

    /**
     * 2、更新定义空间
     *
     * @param dtDefineSpaceVo
     * @return
     */
    @PostMapping(value = "dtDefineSpace/update", consumes = {"application/json"})
    ActionResult update(@RequestBody DtDefineSpaceVo dtDefineSpaceVo);

    /**
     * 3、删除定义空间
     *
     * @param defineSpaceSoid 定义空间soid
     * @return null
     */
    @GetMapping(value = "dtDefineSpace/delete")
    ActionResult delete(@RequestParam("defineSpaceSoid") long defineSpaceSoid);

    /**
     * 4、获取单个定义空间
     *
     * @param defineSpaceSoid 定义空间soid
     * @return
     */
    @GetMapping(value = "dtDefineSpace/get")
    ListResult<DtDefineSpaceVo> get(@RequestParam("defineSpaceSoid") long defineSpaceSoid);

    /**
     * 5、分页查询定义空间
     *
     * @param searChData  搜索关键字
     * @param currentPage 第几页
     * @param pageSize    每页显示数
     * @return
     */
    @GetMapping("dtDefineSpace/findPage")
    ListResult<PageResultVo<DtDefineSpaceVo>> findPage(@RequestParam(value = "searchData") String searChData,
                                                       @RequestParam(value = "currentPage") Long currentPage,
                                                       @RequestParam(value = "pageSize") Long pageSize);

    /**
     * 6、定义空间名称重复性校验
     */
    @GetMapping(value = "dtDefineSpace/checkName")
    ActionResult checkName(@RequestParam(value = "name", required = true) String name,
                           @RequestParam(value = "defineSpaceSoid", required = false) Long defineSpaceSoid);

    /**
     * 7、更改定义空间状态
     *
     * @param defineSpaceSoid 定义空间soid
     * @param status          状态soid
     * @return
     */
    @GetMapping("dtDefineSpace/updateStatus")
    ActionResult updateStatus(@RequestParam(value = "status", required = true) Long status,
                              @RequestParam(value = "defineSpaceSoid", required = true) Long defineSpaceSoid);


    /**
     * 8、查询所有定义空间
     *
     * @param searchData 搜索关键字
     * @return
     */
    @GetMapping(value = "dtDefineSpace/findAll")
    ListResult<List<DtDefineSpace>> findAll(@RequestParam(value = "searchData", required = false) String searchData);


    /**
     * 3.1根据医院soid模糊查询当前医院下员工信息
     *
     * @param search      检索条件:工号,名称,拼音码，五笔码，
     * @param orgInfoSoid 组织soid （医院soid）
     * @param orgInfoType 组织类型:集团-2585、医院-2586、科室-2587
     * @return
     */
    @GetMapping("dtDefineSpace/findEmployeeListByOrgSoid")
    ListResult<List<DtDefineSpaceConsumerVo>> findEmployeeListByOrgSoid(@RequestParam("orgInfoSoid") Long orgInfoSoid,
                                                                        @RequestParam("orgInfoType") Long orgInfoType,
                                                                        @RequestParam(value = "search", defaultValue = "") String search);

    /**
     * 4.1、获取定义空间
     *
     * @param defineSpaceSoid 定义空间soid
     * @return
     */
    @GetMapping(value = "dtDefineSpace/getDtDefineSpaceVos")
    List<DtDefineSpaceConsumerVo> getDtDefineSpaceVos(@RequestParam("defineSpaceSoid") Long defineSpaceSoid);

}
